2020年10月從Alpha Camp畢業後,面試了好幾家公司,感謝一路以來的貴人相助,小弟有幸能加入現在的公司,接到的第一個工作任務就是將資料從非關聯式資料庫 - MongoDB轉移到關連式資料庫 - PostgreSQL。
首先大致介紹一下關聯式資料庫(No SQL)及非關聯式資料庫(SQL)的差別。
非關連式資料庫特點:
關聯式資料庫有特點:
以上介紹摘錄至SQL/NoSQL是什麼?認識資料庫管理系統DBMS
PostgreSQL是工作後才接觸到的關聯式資料庫,與之前學過MySQL,兩者操作操作起來滿類似的,所以在轉移資料庫的過程中還算順利,主要業務就是要將Mongo裡面有的表格、欄位、屬性建立在Postgres,遇到比較特別的事是Mongodb有一個獨有的欄位 _id,資料型別:ObjectId,但PostgreSQL沒有這個型別。
ObjectId 長度為 12 位元組,由幾個 2-4 位元組的鏈結組成。每個鏈結代表並指定文件身份的具體內容。以下的值構成了完整的 12 位元組組合:
一個 4 位元組的值,表示自 Unix 紀元以來的秒數
一個 3 位元組的機器識別元
一個 2 位元組的程序 ID
一個 3 位元組的計數器,以隨機值開始
以上摘錄至Navicat 部落格
在轉換資料庫的過程中,需要寫入自己獨特的ObjectId,但礙於PostgreSQL沒有這個型別,解決方式是將這個欄位以varchar的方式儲存,後續新增資料時,import objectId from "objectid"
,就可以每次都新產一組objectId。
大家可能會有疑問,為什麼不在轉換資料庫時就直接捨棄這個ObjectId資料型別,原因其實是當時專案設計之初,就是以objectId去調用資料庫的資料,所以為了減少變更資料庫的疼痛感,就先以這種方式去處理。對自己來說是個不錯的經驗!